// RAP [bm]: animations
///*******************************************************************************
// * Copyright (c) 2007 IBM Corporation and others.
// * All rights reserved. This program and the accompanying materials
// * are made available under the terms of the Eclipse Public License v1.0
// * which accompanies this distribution, and is available at
// * http://www.eclipse.org/legal/epl-v10.html
// *
// * Contributors:
// *     IBM Corporation - initial API and implementation
// ******************************************************************************/
//
//package org.eclipse.ui.internal;
//
//import org.eclipse.core.runtime.IStatus;
//import org.eclipse.swt.SWTException;
//import org.eclipse.swt.graphics.Color;
//import org.eclipse.swt.graphics.GC;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.graphics.ImageData;
//import org.eclipse.swt.widgets.Display;
//import org.eclipse.swt.widgets.Shell;
//import org.eclipse.ui.internal.misc.StatusUtil;
//import org.eclipse.ui.statushandlers.StatusManager;
//
///**
// * Base class for Cyclic animations.
// * 
// * @since 3.3
// * 
// */
//public abstract class ImageCycleFeedbackBase extends AnimationFeedbackBase {
//	protected Image[] images;
//	protected Image stoppedImage;
//	private Image offScreenImage;
//	private GC offScreenImageGC;
//	private int imageDataIndex;
//	private Image image;
//	private ImageData imageData;
//	protected Display display;
//	protected Color background;
//
//	/**
//	 * @param parentShell
//	 */
//	public ImageCycleFeedbackBase(Shell parentShell) {
//		super(parentShell);
//		// TODO Auto-generated constructor stub
//	}
//
//	/**
//	 * 
//	 * @param parentShell
//	 * @param images :
//	 *            an array of images
//	 */
//	public ImageCycleFeedbackBase(Shell parentShell, Image[] images) {
//		super(parentShell);
//		this.images = images;
//	}
//
//	/**
//	 * Set the image during progress without caching.
//	 * 
//	 * @param image
//	 */
//	public abstract void showImage(Image image);
//
//	/**
//	 * Save initial Image which would be stoppedImage
//	 * 
//	 */
//	public abstract void saveStoppedImage();
//
//	/**
//	 * Set the stopped Image upon animation completion
//	 * 
//	 * @param image
//	 */
//	public abstract void setStoppedImage(Image image);
//
//	public void dispose() {
//		// TODO Auto-generated method stub
//		if (stoppedImage == null || stoppedImage.isDisposed())
//			return;
//		setStoppedImage(stoppedImage);
//
//		if (offScreenImageGC != null && !offScreenImageGC.isDisposed())
//			offScreenImageGC.dispose();
//
//		if (offScreenImage != null && !offScreenImage.isDisposed())
//			offScreenImage.dispose();
//	}
//
//	public boolean jobInit(AnimationEngine engine) {
//		return super.jobInit(engine);
//	}
//
//	public void renderStep(AnimationEngine engine) {
//		// TODO Auto-generated method stub
//		if (offScreenImage == null) {
//			offScreenImage = getOffscreenImage();
//		}
//
//		try {
//			imageDataIndex = (imageDataIndex + 1) % images.length;
//			image = images[imageDataIndex];
//			imageData = image.getImageData();
//
//			offScreenImageGC.drawImage(image, 0, 0, imageData.width,
//					imageData.height, imageData.x, imageData.y,
//					imageData.width, imageData.height);
//
//			final Image finalImage = image;
//
//			display.syncExec(new Runnable() {
//				/*
//				 * (non-Javadoc)
//				 * 
//				 * @see java.lang.Runnable#run()
//				 */
//				public void run() {
//					showImage(finalImage);
//
//				}
//			});
//
//			/*
//			 * Sleep for the specified delay time (adding commonly-used
//			 * slow-down fudge factors).
//			 */
//			// try {
//			// Thread.sleep(30);
//			// } catch (InterruptedException e) {
//			// }
//			if (images == null)
//				return;
//		} catch (SWTException ex) {
//			IStatus status = StatusUtil.newStatus(WorkbenchPlugin.PI_WORKBENCH,
//					ex);
//			StatusManager.getManager().handle(status);
//		}
//	}
//
//	private Image getOffscreenImage() {
//		saveStoppedImage();
//		imageDataIndex = 0;
//		image = images[imageDataIndex];
//		imageData = image.getImageData();
//		/*
//		 * Create an off-screen image to draw on, and fill it with the shell
//		 * background.
//		 */
//		offScreenImage = new Image(display, imageData.width, imageData.height);
//
//		offScreenImageGC = new GC(offScreenImage);
//		offScreenImageGC.setBackground(background);
//		offScreenImageGC.fillRectangle(0, 0, imageData.width, imageData.height);
//
//		/*
//		 * Create the first image and draw it on the off-screen image.
//		 */
//
//		offScreenImageGC.drawImage(image, 0, 0, imageData.width,
//				imageData.height, imageData.x, imageData.y, imageData.width,
//				imageData.height);
//
//		return offScreenImage;
//	}
//
//}
